Heaps and BSTs are both trees, but their different rules lead to different uses.

  • BST Property: left_child < parent < right_child. This strict, total ordering allows for efficient searching, insertion, and deletion, all in \(O(\log n)\) time on average for balanced trees.
  • Heap Property: parent > children (for a max-heap). This partial ordering is less strict. Its only goal is to keep the maximum element at the root for fast access.
  • You cannot search efficiently in a heap. Finding an arbitrary element requires checking nearly all nodes, an \(O(n)\) operation, as the heap property provides no guidance on which branch to follow.

Can a BST Implement a Priority Queue?

Yes, a balanced BST can implement a priority queue. Operations like insert and extractMax (finding and removing the rightmost node) are both \(O(\log n)\). So, which is better for a Priority Queue: a Heap or a Balanced BST?

While both are theoretically efficient, heaps are almost always preferred for implementing priority queues. Heaps have lower overhead, better cache locality (when using an array), and faster `build` and `peek` operations. The table below breaks down the comparison.

Operation / Feature Heap (Array-based) Balanced BST Winner for PQ
Insert \(O(\log n)\) \(O(\log n)\) Heap
Get Max (Peek) \(O(1)\) \(O(\log n)\) Heap
Extract Max \(O(\log n)\) \(O(\log n)\) Heap
Build from Array \(O(n)\) \(O(n \log n)\) Heap
Find Arbitrary Element \(O(n)\) \(O(\log n)\) BST
Ordered Traversal \(O(n \log n)\) (Heap Sort) \(O(n)\) (In-order) BST
Memory / Cache Locality Excellent (Array) Poor (Pointers) Heap

Binary Search Tree (BST)

Max-Heap